Over the past decade, the use of computers and related technology has increased tremendously. In particular, computers often support air traffic control systems, banking systems, and mission critical defense systems, such as computer systems controlling the launch and flight of defense missiles. Deployed in such a ubiquitous manner, the computers can cause severe problems in the functioning of society if any were to fail. Because of the potential for far-reaching adverse effects in the event of failure, computers are being required to ensure ever-higher reliability. Fault-tolerant computers are computers that generally provide this reliability aspect in such systems.
Further, the strains on servers today and the applications they support have never been greater. Fault-tolerant servers are currently being used to minimize the effects of these strains, such as the failed execution of a client request. Typically, a fault-tolerant server includes one or more redundant central processor units (CPUs) and one or more redundant input-output (I/O) boards, or subsystems. The I/O subsystems interface with one or more I/O devices, such as mass storage devices. These mass storage devices are frequently mirrored (i.e., the same data is stored on all of the redundant mass storage devices) to enable a first mass storage device to replace a second mass storage device upon a failure of the second mass storage device.
However, if a mass storage device fails, a CPU cannot access the mirrored mass storage device using the I/O subsystem associated with the failed mass storage device. In other words, the CPU can only access the mirrored mass storage device through an independent I/O subsystem. Thus, upon a failure of a mass storage device, the I/O subsystem associated with the failed mass storage device is replaced by a redundant I/O subsystem to prevent loss of data. The replacement of an I/O subsystem upon the failure of a mass storage device is often burdensome and wasteful of resources of the fault-tolerant server.
Thus, there remains a need to access a mass storage device that is associated with an independent I/O subsystem.